我有2个表(srcTable1和destTable)具有相同的模式.我试图将所有行从srcTable复制到destTable并忽略重复项.我以为我可以添加一个带有子查询的WHERE子句,该子查询只给出不重复的行.但是,它似乎不起作用.我没有插入或选择任何行.
INSERT INTO destTable
SELECT * FROM srcTable
WHERE NOT EXISTS(SELECT * FROM destTable)
Run Code Online (Sandbox Code Playgroud)
我意识到我可以这样做:
INSERT INTO destTable
SELECT * FROM srcTable
WHERE MyKey IN (SELECT MyKey FROM destTable)
Run Code Online (Sandbox Code Playgroud)
但是,我的表有多个键,我想不出你如何用多个键做到这一点.
知道我做错了什么,或者你有更好的想法吗?
我有一个脚本删除我的数据库中的所有表,如下所示:
-- Disable all constraints
EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT all'
-- Disable all triggers
EXEC EnableAllTriggers @Enable = 0
-- Delete data in all tables
EXEC sp_MSForEachTable 'DELETE FROM ?'
-- Dnable all constraints
EXEC sp_MSForEachTable 'ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all'
-- Reseed identity columns
EXEC sp_MSForEachTable 'DBCC CHECKIDENT (''?'', RESEED, 0)'
-- Enable all triggers
EXEC EnableAllTriggers @Enable = 1
Run Code Online (Sandbox Code Playgroud)
当它到达DELETE行时,我得到一些表的错误:
DELETE失败,因为以下SET选项具有不正确的设置:'QUOTED_IDENTIFIER'.验证SET选项是否正确,以便与计算列和/或筛选索引和/或查询通知和/或XML数据类型方法和/或空间索引操作的索引视图和/或索引一起使用.
我没有任何索引视图,所有外键和触发器都被禁用,所以我不知道是什么导致了这个错误.有任何想法吗?
在T-SQL中是否有一种方法可以使用自定义数字格式将TINYINT转换为VARCHAR?例如,我的TINYINT的值为3,我想将其转换为VARCH为03,因此它总是显示一个2位数字.
我没有在CONVERT函数中看到这种能力.
我花了很多时间尝试使用OpenXML格式确定将.NET像素转换为Excel列宽的公式.我正在使用EPPlus生成xmls文档.我正在尝试确定要自动调整大小的列的宽度.我通过测量字符串然后尝试将其转换为OpenXML的列宽来获取像素数,这是用我认为的字符来衡量的.
我已经阅读了微软关于如何转换它的文档,并尝试了他们建议的公式,但它甚至不准确:
http://msdn.microsoft.com/en-us/library/documentformat.openxml.spreadsheet.column.aspx
这是我的代码使用他们的公式:
public double GetCharacterWidth(string Text, Font f, Graphics g)
{
float MaxDigitWidth = g.MeasureString("0", f).Width;
float Pixels = g.MeasureString(Text, f).Width;
return ((Pixels - 5) / MaxDigitWidth * 100 + 0.5) / 100;
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我试图第一次使用自定义程序集将报告部署到服务器.我可以在没有程序集的情况下部署相同的报告.我正在使用Reporting Services 2012(Visual Studio 2010)来部署报表.
以下是我尝试部署时收到的完整错误消息:
加载代码模块时出错:'SGA.Reporting,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'.详细信息:无法加载文件或程序集'SGA.Reporting,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'或其依赖项之一.该系统找不到指定的文件.
我在同一个问题上看过几篇文章,但没有解决我的问题.它是为.NET Framework 4.0,AnyCPU编译的DLL.
在我正在部署的本地PC上我将我的dll复制到所有这些文件夹:C:\ Program Files(x86)\ Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies C:\ Program Files(x86)\ Microsoft Visual Studio 10.0\Common7\IDE\PublicAssemblies C:\ Windows\Microsoft.NET\Framework\v4.0.30319 C:\ Windows\Microsoft.NET\Framework64\v4.0.30319
在我正在部署的服务器上,我已将我的dll复制到以下所有这些文件夹:C:\ Program Files(x86)\ Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies C:\ Program Files(x86)\ Microsoft Visual Studio 10.0\Common7\IDE\PublicAssemblies C:\ Windows\Microsoft.NET\Framework\v4.0.30319 C:\ Windows\Microsoft.NET\Framework64\v4.0.30319
有任何想法吗?
有没有办法阻止用户进入SQL Server Management Studio,以便他们不能只手动编辑表行?他们仍然需要通过运行我的应用程序来访问表.
我正在研究加密SQL Server中的一些敏感数据,例如银行帐号和社会安全号码,以符合新的州法律.我使用SQL Server 2008作为我的.NET代码数据库.我使用.NET加密密码,但为此我想通过简单的对称密钥加密加密我需要的几列数据来使用微软的内置加密.如果我使用SQL Server加密,我可以解密来自外部报告工具的数据,而不仅仅是在我的.NET应用程序中.以下是我正在使用的示例:http: //blog.sqlauthority.com/2009/04/28/sql-server-introduction-to-sql-server-encryption-and-symmetric-key-encryption-tutorial-with-脚本/
它使用由SQL Server创建的证书,然后使用DecryptByKey函数来解密数据,但我正在尝试确定这是多么安全?我如何控制用户可以解密数据的内容,或者只要他们打开对称密钥并使用解密功能,任何人都可以执行此操作?
我试图从iSeries(AS/400)上的DB2中的查询结果创建一个分隔字符串.我在T-SQL中完成了这个,但是在这里找不到办法.
这是我在T-SQL中的代码.我正在寻找DB2中的equivelant.
DECLARE @a VARCHAR(1000)
SELECT @a = COALESCE(@a + ', ' + [Description], [Description])
FROM AP.Checkbooks
SELECT @a
Run Code Online (Sandbox Code Playgroud)
如果我表中的描述如下所示:
说明1
说明2
说明3
然后它会返回:
描述1,描述2,描述3
我喜欢外键,但我遇到了一个问题.我有一个转换程序,我禁用表的外键.我这样做的原因是我可以重新转换主表中的所有记录,但是让其他表依赖于那些未触及的表而不必每次都重新转换它们因为它们是巨大的.
我正在使用这些命令来禁用和重新启用外键:
ALTER TABLE MyTable NOCHECK CONSTRAINT MyConstraint
ALTER TABLE MyTable CHECK CONSTRAINT MyConstraint
Run Code Online (Sandbox Code Playgroud)
但是,在我重新启用约束"检查创建或重新启用时的现有数据"仍然设置为否.我知道它被设置为否因为我禁用了约束,但是通过这样做它改变了我的数据库模式,我不喜欢.我认为这将被视为重新启用约束并将检查现有数据,但显然不是.
有没有办法用ALTER TABLE命令改变它?我知道如果我删除约束并重新创建它,我就可以了,但我不打算编写脚本来重新创建我拥有的每个外键并保持它.
我正在使用SQL Server 2008 R2.
我正在设计一个应用程序,我正在寻找最好的方法来告诉谁当前登录到SQL服务器.我将使用SSMS内置的Activity Monitor,它显示了访问服务器的所有进程的列表 - 非常酷.
但是,如果在我的.NET代码中,每次访问数据库时它都使用单独的连接,那么我如何能够告诉谁当前登录?如果用户只是在看屏幕而当时没有从数据库中检索数据,那么它们就不会显示正确吗?
sql-server ×5
t-sql ×4
sql ×3
.net ×1
c# ×1
db2 ×1
encryption ×1
ibm-midrange ×1
openxml ×1
security ×1