我应该使用动态SQL还是其他方式

时间:2014-02-12 07:37:31

标签: sql sql-server sql-server-2008-r2

我有这样的事情:

AND t2.AUD_ORGID IN (SELECT Org_ID 
                     FROM [development_company_database].[dbo].fx_Rights_ORGIDs(@ORG_ID))

我正在研究数据库A,fx_Rights_ORGIDs在数据库B上。我应该使用动态SQL连接到它(我真的不想这样做)

Dymamic:

SET @MANDB = (SELECT DatabseDB FROM SERVER)
SET @MANOwner = (SELECT DatabaseOwner FROM SERVER)
SET @serverMan = (Select @DatabseDB +'.'+ @DatabaseOwner ) ...

...AND t2.AUD_ORGID IN (SELECT Org_ID FROM ['+ @COMPANYDB +'].['+ @COMPANYOwner +'].fx_Rights_ORGIDs( '+ CAST(@ORG_ID AS VARCHAR) + '))

...EXEC sp_executesql @Tsql2

只是想知道有没有方法,我不想像这样对数据库进行硬编码:

[development_company_database].[dbo].

1 个答案:

答案 0 :(得分:0)

关于事物的另一种看法,我会说我会考虑一些因素。

  1. 数据库名称和位置是否一致?如果是这样,并且你是唯一运行它的人,那么对可移植脚本进行硬编码并不是那么糟糕。但是,就个人而言,如果数据库名称发生变化,我宁愿只更改脚本顶部的一个条目,并确保它始终保持一致。 另一种方法是使用SSMS 2012中的模板功能。这实质上与Ctrl + H相同。 我想这取决于您计划在未来更改此脚本的程度。

  2. 这是存储过程吗?如果你运行它很多,那么它应该是,如果是这样,硬编码的数据库名称并不理想。最好声明变量并在运行时设置它们。

  3. 我使用动态SQL运行了很多脚本而没有性能损失。唯一可以肯定的方法是比较两者的表现并在那里得出你自己的结论。

相关问题